package com.boarsoft.boar.lib;

import java.util.List;

import com.boarsoft.bean.ReplyInfo;
import com.boarsoft.boar.entity.DirInfo;
import com.boarsoft.boar.entity.LibInfo;
import com.boarsoft.boar.entity.SoaNexus;
import com.boarsoft.common.dao.PagedResult;

public interface LibBiz {
	/**
	 * 保存库包，同时保存到目录树
	 *
	 * @param d
	 * @param o
	 * @return
	 */
	ReplyInfo<Object> add(DirInfo d, LibInfo o);

	/**
	 * 删除某个库包，需同步删除目录
	 *
	 * @param id
	 */
	void delete(String id);

	/**
	 * 逻辑上移除某个库包与App的关联关系，只操作app_lib表
	 *
	 * @param appId
	 * @param libId
	 */
	void remove(String appId, String libId);

	/**
	 * 更新某个库包的信息
	 *
	 * @param d
	 * @param a
	 * @return
	 */
	ReplyInfo<Object> update(DirInfo d, LibInfo a);

	/**
	 * 获取库包信息
	 *
	 * @param id
	 * @return
	 */
	LibInfo get(String id);

	/**
	 * 查询LIB（JAR）的依赖项
	 *
	 * @param id
	 * @return
	 */
	List<SoaNexus> listByMe(String id);

	/**
	 * 查询LIB（JAR）被哪些依赖
	 *
	 * @param id
	 * @return
	 */
	List<SoaNexus> listOnMe(String id);

	/**
	 * 按系统查询其下的库包
	 * 
	 * @param projId
	 * @param key
	 * @param orderBy
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	PagedResult<LibInfo> list(String projId, String key, String orderBy, int pageNo, int pageSize);

	/**
	 * 启用库包
	 *
	 * @param id
	 * @return
	 */
	void start(String ids);

	/**
	 * 停用库包
	 *
	 * @param id
	 * @return
	 */
	void stop(String ids);

	/**
	 * 复制ID为sourceId的节点到ID为parentId的节点下
	 * 
	 * @param sourceId
	 *            被拷贝的节点的ID
	 * @param parentId
	 *            目标节点（新节点的父节点）
	 * @param newId
	 *            新节点的ID（需要与DirInfo一致）
	 * @return
	 */
	String copy(String sourceId, String parentId, String newId);

	/**
	 * 查询位于Proj中（可选），但被或未被App所依赖的库包
	 * 
	 * @param projId
	 * @param in
	 *            true：被App依赖，false：未被App依赖
	 * @param appId
	 * @param key
	 * @param orderBy
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	PagedResult<LibInfo> list(String projId, boolean in, String appId, String key, String orderBy, int pageNo, int pageSize);
}